package cn.wolfcode.trip.api.controller;

import cn.wolfcode.trip.base.domain.User;
import cn.wolfcode.trip.base.query.TravelQueryObject;
import cn.wolfcode.trip.base.service.ITravelService;
import cn.wolfcode.trip.base.service.IUserService;
import cn.wolfcode.trip.base.util.JsonResult;
import com.github.pagehelper.PageInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/users")
public class UserController {

    @Autowired
    private IUserService userSerivce;

    @Autowired
    private ITravelService travelService;

    /**
     * 注册用户接口
     * 资源   /users
     * 请求方式 post
     * 请求参数 昵称/邮箱/密码(用户对象接收)
     * 返回结果 JsonResult
     */
    @PostMapping
    public JsonResult register(User user) {
        JsonResult json = new JsonResult();
        try {
            userSerivce.register(user);
        } catch (Exception e) {
            e.printStackTrace();
            json.mark("保存失败");
        }
        return json;
    }

    /**
     * 修改用户信息接口
     * 资源 /users/{id}
     * 请求方式 put
     * 请求参数 user对象
     * 返回结果 JsonResult
     */
    @PutMapping("{id}")
    public JsonResult update(User user) {
        JsonResult json = new JsonResult();
        try {
            userSerivce.update(user);
            json.setData(user);
        } catch (Exception e) {
            e.printStackTrace();
            json.mark(e.getMessage());
        }
        return json;
    }

    /**
     * 获取个人空间信息接口
     * 资源 /users/{id}
     * 请求方式 get
     * 请求参数 Long id
     * 返回结果 JsonResult
     */
    @GetMapping("{id}")
    public JsonResult get(@PathVariable Long id) {
        JsonResult json = new JsonResult();
        try {
            User user = userSerivce.get(id);
            json.setData(user);
        } catch (Exception e) {
            e.printStackTrace();
            json.mark("获取空间信息失败");
        }
        return json;
    }
    /**
     * 获取我的游记资源接口
     * 资源  /users/{id}/travels
     * 请求方式 get
     * 请求参数 TravelQuery
     * 返回结果 PageInfo
     */
    @GetMapping("/{authorId}/travels")
    public PageInfo query(TravelQueryObject qo) {
        qo.setOrderBy("t.lastUpdateTime desc"); // 按最后更新时间进行排序
        return travelService.query(qo);
    }
}
